home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / postgres / postgre4.z / postgre4 / src / utils / adt / oidchar16.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-27  |  2.6 KB  |  133 lines

  1. /* $Header: /private/postgres/src/utils/adt/RCS/oidchar16.c,v 1.4 1992/08/25 17:50:58 mer Exp $ */
  2. /*
  3.  * oidchar16.c --
  4.  *
  5.  *    adt for multiple key indices involving oid and char16.  Used for cache
  6.  *    index scans (could also be used in the general case with char16).
  7.  */
  8. #include "tmp/postgres.h"
  9. #include "utils/oidcompos.h"
  10. #include "utils/log.h"
  11.  
  12.  
  13. OidChar16
  14. oidchar16in(inStr)
  15.     char *inStr;
  16. {
  17.     OidChar16 oc;
  18.     char *inptr;
  19.  
  20.     oc = (OidChar16) palloc(sizeof(OidChar16Data));
  21.  
  22.     bzero(oc, sizeof(OidChar16Data));
  23.     for (inptr = inStr; *inptr && *inptr != ','; inptr++)
  24.     ;
  25.  
  26.     if (*inptr)
  27.     {
  28.     oc->id = atoi(inStr);
  29.     strncpy(&(oc->name.data[0]), ++inptr, sizeof(char16));
  30.     }
  31.     else
  32.     elog(WARN, "Bad input data for type oidchar16");
  33.  
  34.     return oc;
  35. }
  36.  
  37. char *
  38. oidchar16out(oidname)
  39.     OidChar16 oidname;
  40. {
  41.     char *outStr;
  42.  
  43.     outStr = (char *)palloc(sizeof(OidChar16Data) + sizeof(ObjectId) + 2);
  44.  
  45.     sprintf(outStr, "%d,%s", oidname->id, &oidname->name.data[0]);
  46.  
  47.     return (outStr);
  48. }
  49.  
  50. bool
  51. oidchar16lt(o1, o2)
  52.     OidChar16 o1, o2;
  53. {
  54.     return (bool)
  55.     (o1->id < o2->id ||
  56.      (o1->id == o2->id && strncmp(&o1->name.data[0],
  57.                       &o2->name.data[0],
  58.                       sizeof(char16)) < 0));
  59. }
  60.  
  61. bool
  62. oidchar16le(o1, o2)
  63.     OidChar16 o1, o2;
  64. {
  65.     return (bool)
  66.     (o1->id < o2->id ||
  67.          (o1->id == o2->id && strncmp(&o1->name.data[0],
  68.                       &o2->name.data[0],
  69.                       sizeof(char16)) <= 0));
  70. }
  71.  
  72. bool
  73. oidchar16eq(o1, o2)
  74.     OidChar16 o1, o2;
  75. {
  76.     return (bool)
  77.     (o1->id == o2->id &&
  78.          (strncmp(&o1->name.data[0], &o2->name.data[0], sizeof(char16)) == 0));
  79. }
  80.  
  81. bool
  82. oidchar16ne(o1, o2)
  83.     OidChar16 o1, o2;
  84. {
  85.     return (bool)
  86.     (o1->id != o2->id ||
  87.          (strncmp(&o1->name.data[0], &o2->name.data[0], sizeof(char16)) != 0));
  88. }
  89.  
  90. bool
  91. oidchar16ge(o1, o2)
  92.     OidChar16 o1, o2;
  93. {
  94.     return (bool) (o1->id > o2->id || (o1->id == o2->id && 
  95.                     strncmp(&o1->name.data[0],
  96.                         &o2->name.data[0],
  97.                         sizeof(char16)) >= 0));
  98. }
  99.  
  100. bool
  101. oidchar16gt(o1, o2)
  102.     OidChar16 o1, o2;
  103. {
  104.     return (bool) (o1->id > o2->id ||  (o1->id == o2->id && 
  105.                     strncmp(&o1->name.data[0],
  106.                         &o2->name.data[0],
  107.                         sizeof(char16)) > 0));
  108. }
  109.  
  110. int
  111. oidchar16cmp(o1, o2)
  112.     OidChar16 o1, o2;
  113. {
  114.     if (o1->id == o2->id)
  115.         return (strncmp(&o1->name.data[0], &o2->name.data[0], sizeof(char16)));
  116.  
  117.     return (o1->id < o2->id) ? -1 : 1;
  118. }
  119.  
  120. OidChar16
  121. mkoidchar16(id, name)
  122.     ObjectId id;
  123.     char *name;
  124. {
  125.     OidChar16 oidchar16;
  126.  
  127.     oidchar16 = (OidChar16) palloc(sizeof(ObjectId)+sizeof(char16));
  128.  
  129.     oidchar16->id = id;
  130.     strncpy(&oidchar16->name.data[0], name, sizeof(char16));
  131.     return oidchar16;
  132. }
  133.